package com.atguigu.gmall.feign;

import com.atguigu.gmall.model.product.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@FeignClient(name = "service-product", path = "/api/item")
public interface ProductFeignClient {

    /**
     * 取消订单，回滚商品库存
     * @param skuIdAndSkuNumMap
     * @return
     */
    @PutMapping("/rollbackStock")
    public Boolean rollbackStock(@RequestParam Map<String,Object> skuIdAndSkuNumMap);

    /**
     * 订单生成减库存
     * @return
     */
    @PutMapping("/decount")
    public Boolean decount(@RequestParam Map decountMap);

    /**
     * 拿到指定skuId的商品的平台属性和属性值集合
     * @param skuId
     * @return
     */
    @GetMapping("/listBaseAttrInfoBySkuId/{skuId}")
    public List<BaseAttrInfo> listBaseAttrInfoBySkuId(@PathVariable("skuId")Long skuId);

    /**
     * 根据品牌id查询品牌信息
     * @param tmId
     * @return
     */
    @GetMapping("/getBaseTrademarkById/{tmId}")
    public BaseTrademark getBaseTrademarkById(@PathVariable("tmId") Long tmId);

    /**
     * 根据spuId查询sku与销售属性值组合键值对
     * @param spuId
     * @return
     */
    @GetMapping("/listSkuSaleAttrValueBySpuId/{spuId}")
    public Map listSkuSaleAttrValueBySpuId(@PathVariable("spuId") Long spuId);

    /**
     * 根据spuid和skuid查询当前商品所属spu的全部销售属性和值,并且标识当前应该选中哪几个值
     * @param skuId
     * @return
     */
    @GetMapping("/listSpuSaleAttrBySpuIDAndSkuId/{spuId}/{skuId}")
    public List<SpuSaleAttr> listSpuSaleAttrBySpuIDAndSkuId(@PathVariable("spuId") Long spuId,
                                                            @PathVariable("skuId") Long skuId);

    /**
     * 根据skuId查询价格
     * @param skuId
     * @return
     */
    @GetMapping("/getSkuInfoPriceBySkuId/{skuId}")
    public BigDecimal getSkuInfoPriceBySkuId(@PathVariable("skuId") Long skuId);

    /**
     * 根据skuId查询商品对应的图片
     * @param skuId
     * @return
     */
    @GetMapping("/listSkuImageBySkuId/{skuId}")
    public List<SkuImage> listSkuImageBySkuId(@PathVariable("skuId") Long skuId);

    /**
     * 根据category3Id查询一、二、三分类数据
     * @param category3Id
     * @return
     */
    @GetMapping("/listCategoryByCategory3Id/{category3Id}")
    public BaseCategoryView listCategoryByCategory3Id(@PathVariable("category3Id") Long category3Id);

    @GetMapping("/getSkuInfoBySkuId/{skuId}")
    public SkuInfo getSkuInfoBySkuId(@PathVariable("skuId") Long skuId);
}
